#include <math.h>
#include <vector>
#include <algorithm>
#include <stdio.h>
using namespace std;
#define eps 1E-12
struct P
{ 
	double x, y;
	P(double x=0, double y=0): x(x), y(y) {}
};
P operator +(P a, P b) { return P(a.x+b.x, a.y+b.y); }
P operator -(P a, P b) { return P(a.x-b.x, a.y-b.y); }
P operator *(P a, double b) { return P(a.x*b, a.y*b); }
double operator &(P a, P b) { return a.x*b.x+a.y*b.y; }
double operator *(P a, P b) { return a.x*b.y-a.y*b.x; }
double operator !(P a) { return sqrt(a&a); }
P operator ~(P a) { return P(-a.y, a.x); }
vector <P> v;
void add(P a, P b, double r)
{
	double l;
	l=r*r/((b-a)&(b-a))-1.0/4.0;
	if(l>0)
	{
		l=sqrt(l);
		v.push_back((a+b)*0.5+~(b-a)*l);
		v.push_back((a+b)*0.5-~(b-a)*l);
	}
}
bool in(P a, P b, double r)
{
	return !(b-a)+eps<r;
}
int a[3];
double bs()
{
	int t, i, j;
	double l, r, c;
	P p[4];
	r=sqrt((double)a[0]*a[0]+(a[1]+a[2])*(a[1]+a[2]));
	l=sqrt((double)a[2]*a[2]+(a[0]+a[1])*(a[0]+a[1]));
	p[0]=P(0, -a[2]);
	p[1]=P(a[1]+a[2], -a[1]);
	p[2]=P(-a[0], a[0]+a[2]);
	p[3]=P(-a[2], 0);
	for(t=0; t<100; t++)
	{
		c=(l+r)/2;
		v.clear();
		for(i=0; i<4; i++)
			for(j=i+1; j<4; add(p[i], p[j], c), j++);
		for(i=0; i<v.size(); i++)
			if(v[i].x>0 && v[i].x<a[1] && v[i].y>0 && v[i].y<a[0])
			{
				for(j=0; j<4 && !in(v[i], p[j], c); j++);
				if(j==4) break;
			}
		if(i<v.size()) l=c;
		else r=c;
	}
	return r;
}
int main()
{
	scanf("%d%d%d", &a[0], &a[1], &a[2]);
	sort(a, a+3);
	printf("%.13lf\n", bs());
	return 0;
}